home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-06-01 | 2.5 KB | 84 lines | [TEXT/MPS ] |
- #open "prop";;
- #open "lexuniv";;
-
- let rec lire_proposition f = proposition5 f
-
- and proposition0 = function
- [< 'Ident s >] -> Variable s
- | [< 'MC "vrai" >] -> Vrai
- | [< 'MC "faux" >] -> Faux
- | [< 'MC "("; lire_proposition p; 'MC ")" >] -> p
-
- and proposition1 = function
- [< 'MC "non"; proposition0 p >] -> Non p
- | [< proposition0 p >] -> p
-
- and proposition2 = function
- [< proposition1 p; (reste2 p) q >] -> q
- and reste2 p = function
- [< 'MC "et"; proposition1 q; (reste2 (Et (p, q))) r >] -> r
- | [<>] -> p
-
- and proposition3 = function
- [< proposition2 p; (reste3 p) q >] -> q
- and reste3 p = function
- [< 'MC "ou"; proposition2 q; (reste3 (Ou (p, q))) r >] -> r
- | [<>] -> p
-
- and proposition4 = function
- [< proposition3 p; (reste4 p) q >] -> q
- and reste4 p = function
- [< 'MC "=>"; proposition3 q; (reste4 (Implique (p, q))) r >] -> r
- | [<>] -> p
-
- and proposition5 = function
- [< proposition4 p; (reste5 p) q >] -> q
- and reste5 p = function
- [< 'MC "<=>"; proposition4 q; (reste5 (Équivalent(p,q))) r >] -> r
- | [<>] -> p;;
- let lire_opération lire_opérateur lire_base constructeur =
- let rec lire_reste e1 = function
- [< lire_opérateur _;
- lire_base e2;
- (lire_reste (constructeur (e1, e2))) e >] -> e
- | [< >] -> e1 in
- function [< lire_base e1; (lire_reste e1) e >] -> e;;
- let rec lire_proposition f = proposition5 f
-
- and proposition0 = function
- [< 'Ident s >] -> Variable s
- | [< 'MC "vrai" >] -> Vrai
- | [< 'MC "faux" >] -> Faux
- | [< 'MC "("; lire_proposition p; 'MC ")" >] -> p
-
- and proposition1 = function
- [< 'MC "non"; proposition0 p >] -> Non p
- | [< proposition0 p >] -> p
-
- and proposition2 flux =
- lire_opération (function [< 'MC "et" >] -> ())
- proposition1
- (function (p,q) -> Et (p,q))
- flux
- and proposition3 flux =
- lire_opération (function [< 'MC "ou" >] -> ())
- proposition2
- (function (p,q) -> Ou (p,q))
- flux
- and proposition4 flux =
- lire_opération (function [< 'MC "=>" >] -> ())
- proposition3
- (function (p,q) -> Implique (p,q))
- flux
- and proposition5 flux =
- lire_opération (function [< 'MC "<=>" >] -> ())
- proposition4
- (function (p,q) -> Équivalent (p,q))
- flux;;
- let analyseur_lexical =
- construire_analyseur
- ["vrai"; "faux"; "("; ")"; "non"; "et"; "ou"; "=>"; "<=>"];;
-
- let analyse_proposition chaîne =
- lire_proposition (analyseur_lexical (stream_of_string chaîne));;
-